5126
11656
Lukket. Dette spørsmålet trenger detaljer eller klarhet. Det aksepteres for øyeblikket ikke svar.
Vil du forbedre dette spørsmålet? Legg til detaljer og avklar problemet ved å redigere dette innlegget.
Stengt for 1 år siden.
Forbedre dette spørsmålet
Jeg gjør noen kodeutfordringer, og jeg vil hente de første 3 verdiene fra matrisen min ved å spesifisere startindeksen og bare få de første (3 eller kan være lengder) verdiene fra startindeksen.
Jeg prøvde denne koden og den fungerer, men kodestrukturen er for lang, så hvordan kan jeg gjøre dette kortere, slik at det kan være lett å forstå.
int n = 10;
dobbel signatur = ny dobbel [] {1, 1, 1};
dobbel [] ret = ny dobbel [n];
dobbel sum = 0;
ret [0] = signatur [0];
ret [1] = signatur [1];
ret [2] = signatur [2];
int x, i;
for (i = 0; i 
                                
Ved å bruke LINQ kan du prøve noe som dette:
var-verdier = array.Skip (indeks)
Ta (n)
.ToArray ();
Hvor indeks er indeksen for det første elementet og n antallet elementene du vil velge.
F.eks. https://dotnetfiddle.net/Pk1rwY
Som en sidemerknad. Å bruke LINQ betyr ikke at koden din ville være raskere. Det ville være mer kompakt / lesbart osv. For å kunne vurdere hvor performant koden din er, må du bruke noe som BenchmarkDotNet.
|
Ingen Linq-løsning:
privat statisk T [] Ekstrakt  (T [] kilde, int fraIndex, int lengde) {
hvis (null == kilde)
kaste nytt ArgumentNullException (nameof (kilde));
annet hvis (fraIndex <0)
kast nytt ArgumentOutOfRangeException (nameof (fromIndex),
"Fra indeksen må ikke være negativ");
annet hvis (lengde <0)
kast nytt ArgumentOutOfRangeException (nameof (lengde),
"Lengden må ikke være negativ");
hvis (fraIndex> = kilde.Lengde || lengde == 0)
returner nye T [0];
T [] resultat = ny T [Math.Min (lengde, kilde.Lengde - fraIndex)];
Array.Copy (kilde, fraIndex, resultat, 0, resultat.Lengde);
returresultat;
}
Deretter
dobbel [] signatur = ny dobbel [] {0, 1, 2, 3, 4, 5};
dobbelt [] ret = Ekstrakt (signatur, 3, 2);
Console.Write (string.Join (",", ret));
Utfall:
3, 4
|
Fra spørsmålet ditt, må du dra nytte av operatørene .Take og .Skip.
var result = array.Skip (startingIndex) .Take (numberOfElements);
Fra koden din ser det ut til at du prøver å gjøre noe litt annerledes, nemlig summeringselementer. .Sum-operatøren kan være til hjelp her.
|
Er ikke svaret du leter etter? Bla gjennom andre spørsmål merket c # arrays linq eller still ditt eget spørsmål.